/*
 页面加载的时候
 1. 从缓存中获取购物车数据 渲染到页面中
    这些数据 chaecked = true 才可以显示数据的存在

 2. 微信支持
    2.1 哪些人 哪些账号 可以实现微信支付
    2.2 企业账号
    2.3 企业账号的小程序后台中 必须给 开发者 添加上白名单
    2.4 一个 appid 可以同时绑定多个开发者
    2.5 这些开发者就可以公用这个 appid 和 他的开发权限
 
 3. 支付按钮
    3.1 先判断缓存中有没有 token
    3.2 没有 跳转到授权页面 进行获取token
    3.3 有token
    3.4 创建订单 获取订单编号
    3.5 支付已完成， 删除已支付的商品
    3.6 重新将删除后的数据进行刷新填充回缓存
    3.7 再跳转到页面
    
*/

// 导入封装好的异步收获地址方法
import {
  getSetting,
  chooseAddress,
  openSetting,
  showModal,
  showToast,
  requestPayment,
} from "../../utils/asyncWx.js";
import regeneratorRuntime from "../../lib/runtime/runtime";
import { request } from "../../request/index.js";

Page({
  data: {
    address: {}, //获取商品在缓存中的信息
    cart: [], //商品存在购物车中的数据
    totalPrice: 0, //购物车总价格
    totalNum: 0, //购物车中添加的数量
  },
  onShow() {
    // 1. 获取缓存中收获地址信息
    const address = wx.getStorageSync("address");
    // 4.1 获取缓存中的购物车数据
    let cart = wx.getStorageSync("cart") || [];
    // 过滤后的购物车数组 直接给cart赋值 存储到缓存中
    cart = cart.filter((v) => v.checked);
    this.setData({ address });

    // 6. 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;

    cart.forEach((v) => {
      totalPrice += v.num * v.goods_price;
      totalNum += v.num;
    });
    this.setData({
      cart,
      totalPrice,
      totalNum,
      address,
    });
  },

  // 点击支付
  async handleOrderPay() {
    try {
      // 1.先判断缓存中有没有 token
      const token = wx.getStorageSync("token");
      // 2.判断
      if (!token) {
        wx.navigateTo({
          url: "/pages/auth/auth",
        });
        return;
      }
      // 测试
      console.log("已存在 token");

      // 3 创建订单
      // 3.1 准备 请求头参数
      // const header = { Authorization: token };
      // 3.2 准备请求体参数
      // 价格
      const order_price = this.data.totalPrice;
      // 详细地址
      const consignee_addr = this.data.consignee_addr;
      //
      // 1. 获取购物车信息
      const cart = this.data.cart;
      let goods = [];
      cart.forEach((v) =>
        goods.push({
          goods_id: v.goods_id,
          goods_number: v.num,
          goods_price: v.goods_price,
        })
      );

      // 整合所需的数据
      const orderParams = { order_price, consignee_addr, goods };
      // 4 准备发送请求 创建订单 发送订单
      const { order_number } = await request({
        url: "/my/orders/create",
        method: "POST",
        data: orderParams,
        // header 由于同名 则可以删除，只留一个
      });
      // 显示订单编号
      // console.log(order_number);

      // 5.发起 预支付接口
      const { pay } = await request({
        url: "/my/orders/req_unifiedorder",
        method: "POST",
        data: { order_number },
        // header 由于同名 则可以删除，只留一个
      });
      // 测试
      // console.log(res);

      // 6.发起微信支付
      await requestPayment(pay);
      // console.log(res);

      // 7.查询后台 订单状态
      const res = await request({
        url: "/my/orders/chkOrder",
        method: "POST",
        data: { order_number },
        // header 由于同名 则可以删除，只留一个
      });
      // 测试
      //  console.log(res);

      // 支付成功
      await showToast({ title: "支付成功" });

      // 8.手动删除缓存中已支付的数据
      // 8.1 获取缓存中的商品数据
      let newCart = wx.getStorageSync("cart");
      // 8.2 过滤掉选中的商品，留下未选中的商品
      newCart = newCart.filter((v) => !v.checked);
      // 8.3 重新填充回 缓存中
      wx.getStorageSync("cart", newCart);

      // 8.支付成功的话，跳转到订单页面
      wx.navigateTo({
        url: "/pages/order/order",
      });
    } catch (err) {
      await showToast({ title: "支付失败" });
      console.log(err);
    }
  },
});
